//初始化我的最近会话表格
function initGetRecentContactListTable(data) {
    $('#get_recent_contact_list_table').bootstrapTable({
        method: 'get',
        cache: false,
        height: 500,
        striped: true,
        pagination: true,
        pageSize: pageSize,
        pageNumber: 1,
        pageList: [10, 20, 50, 100],
        search: true,
        showColumns: true,
        clickToSelect: true,
        columns: [
            { field: "SessionType", title: "会话类型(英文)", align: "center", valign: "middle", sortable: "true", visible: false },
            { field: "SessionTypeZh", title: "会话类型", align: "center", valign: "middle", sortable: "true" },
            { field: "SessionId", title: "会话ID", align: "center", valign: "middle", sortable: "true" },
            { field: "SessionNick", title: "会话昵称", align: "center", valign: "middle", sortable: "true" },
            { field: "SessionImage", title: "会话头像", align: "center", valign: "middle", sortable: "true", visible: false },
            { field: "C2cAccount", title: "发送者ID", align: "center", valign: "middle", sortable: "true" },
            { field: "C2cNick", title: "发送者昵称", align: "center", valign: "middle", sortable: "true" },
            { field: "UnreadMsgCount", title: "未读数", align: "center", valign: "middle", sortable: "true" },
            { field: "MsgSeq", title: "Seq", align: "center", valign: "middle", sortable: "true" },
            { field: "MsgRandom", title: "Random", align: "center", valign: "middle", sortable: "true" },
            { field: "MsgTimeStamp", title: "时间", align: "center", valign: "middle", sortable: "true" },
            { field: "MsgShow", title: "内容", align: "center", valign: "middle", sortable: "true" }
        ],
        data: data,
        formatNoMatches: function () {
            return '无符合条件的记录';
        }
    });
}

//我的最近联系人
var getRecentContactList = function () {
    initGetRecentContactListTable([]);
    var options = {
        'Count': reqRecentSessCount//最近的会话数
    };
    webim.getRecentContactList(
        options,
        function (resp) {
            var data = [];
            var tempSess, tempSessMap = {};//临时会话变量
            if (resp.SessionItem && resp.SessionItem.length > 0) {

                for (var i in resp.SessionItem) {
                    var item = resp.SessionItem[i];
                    var type = item.Type;//接口返回的会话类型
                    var sessType, typeZh, sessionId, sessionNick = '', sessionImage = '', senderId = '', senderNick = '';
                    if (type == webim.RECENT_CONTACT_TYPE.C2C) {//私聊
                        typeZh = '私聊';
                        sessType = webim.SESSION_TYPE.C2C;//设置会话类型
                        sessionId = item.To_Account;//会话id，私聊时为好友ID或者系统账号（值为@TIM#SYSTEM，业务可以自己决定是否需要展示），注意：从To_Account获取,

                        if (sessionId == '@TIM#SYSTEM') {//先过滤系统消息，，
                            webim.Log.warn('过滤好友系统消息,sessionId=' + sessionId);
                            continue;
                        }
                        var key = sessType + "_" + sessionId;
                        var c2cInfo = infoMap[key];
                        if (c2cInfo && c2cInfo.name) {//从infoMap获取c2c昵称
                            sessionNick = c2cInfo.name;//会话昵称，私聊时为好友昵称，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionNick = sessionId;//会话昵称，如果昵称为空，默认将其设成会话id
                        }
                        if (c2cInfo && c2cInfo.image) {//从infoMap获取c2c头像
                            sessionImage = c2cInfo.image;//会话头像，私聊时为好友头像，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionImage = friendHeadUrl;//会话头像，如果为空，默认将其设置demo自带的头像
                        }
                        senderId = senderNick = '';//私聊时，这些字段用不到，直接设置为空

                    } else if (type == webim.RECENT_CONTACT_TYPE.GROUP) {//群聊
                        typeZh = '群聊';
                        sessType = webim.SESSION_TYPE.GROUP;//设置会话类型
                        sessionId = item.ToAccount;//会话id，群聊时为群ID，注意：从ToAccount获取
                        sessionNick = item.GroupNick;//会话昵称，群聊时，为群名称，接口一定会返回

                        if (item.GroupImage) {//优先考虑接口返回的群头像
                            sessionImage = item.GroupImage;//会话头像，群聊时，群头像，如果业务设置过群头像（设置群头像请参考wiki文档-设置群资料接口），接口会返回
                        } else {//接口没有返回或者没有设置过群头像，再从infoMap获取群头像
                            var key = sessType + "_" + sessionId;
                            var groupInfo = infoMap[key];
                            if (groupInfo && groupInfo.image) {//
                                sessionImage = groupInfo.image
                            } else {//不存在或者没有设置过，则使用默认头像
                                sessionImage = groupHeadUrl;//会话头像，如果没有设置过群头像，默认将其设置demo自带的头像
                            }
                        }
                        senderId = item.MsgGroupFrom_Account;//群消息的发送者id

                        if (!senderId) {//发送者id为空
                            webim.Log.warn('群消息发送者id为空,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }
                        if (senderId == '@TIM#SYSTEM') {//先过滤群系统消息，因为接口暂时区分不了是进群还是退群等提示消息，
                            webim.Log.warn('过滤群系统消息,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }

                        senderNick = item.MsgGroupFromCardName;//优先考虑群成员名片
                        if (!senderNick) {//如果没有设置群成员名片
                            senderNick = item.MsgGroupFromNickName;//再考虑接口是否返回了群成员昵称
                            if (!senderNick) {//如果接口没有返回昵称或者没有设置群昵称，从infoMap获取昵称
                                var key = webim.SESSION_TYPE.C2C + "_" + senderId;
                                var c2cInfo = infoMap[key];
                                if (c2cInfo && c2cInfo.name) {
                                    senderNick = c2cInfo.name;//发送者群昵称
                                } else {
                                    sessionNick = senderId;//如果昵称为空，默认将其设成发送者id
                                }
                            }
                        }

                    } else {
                        typeZh = '未知类型';
                        sessionId = item.ToAccount;//
                    }

                    if (!sessionId) {//会话id为空
                        webim.Log.warn('会话id为空,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionId == '@TLS#NOT_FOUND') {//会话id不存在，可能是已经被删除了
                        webim.Log.warn('会话id不存在,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionNick.length > maxNameLen) {//帐号或昵称过长，截取一部分，出于demo需要，业务可以自己决定
                        sessionNick = sessionNick.substr(0, maxNameLen) + "...";
                    }

                    tempSess = tempSessMap[sessType + "_" + sessionId];
                    if (!tempSess) {//先判断是否存在（用于去重），不存在增加一个
                        tempSessMap[sessType + "_" + sessionId] = true;
                        data.push({
                            SessionType: sessType,//会话类型
                            SessionTypeZh: typeZh,//会话类型中文
                            SessionId: webim.Tool.formatText2Html(sessionId),//会话id
                            SessionNick: webim.Tool.formatText2Html(sessionNick),//会话昵称
                            SessionImage: sessionImage,//会话头像
                            C2cAccount: webim.Tool.formatText2Html(senderId),//发送者id
                            C2cNick: webim.Tool.formatText2Html(senderNick),//发送者昵称
                            UnreadMsgCount: item.UnreadMsgCount,//未读消息数
                            MsgSeq: item.MsgSeq,//消息seq
                            MsgRandom: item.MsgRandom,//消息随机数
                            MsgTimeStamp: webim.Tool.formatTimeStamp(item.MsgTimeStamp),//消息时间戳
                            MsgShow: item.MsgShow//消息内容
                        });
                    }
                }
            }
            $('#get_recent_contact_list_table').bootstrapTable('load', data);
            $('#get_recent_contact_list_dialog').modal('show');
        },
        function (err) {
            alert(err.ErrorInfo);
        }
    );
};

//初始化聊天界面左侧最近会话列表
var initRecentContactList = function (cbOK, cbErr) {
    console.log('initRecentContactList')
    var options = {
        'Count': reqRecentSessCount//要拉取的最近会话条数
    };
    webim.getRecentContactList(
        options,
        function (resp) {

            console.log(resp)
            var tempSess;//临时会话变量
            var firstSessType;//保存第一个会话类型
            var firstSessId;//保存第一个会话id


            //清空聊天对象列表
            var sessList = document.getElementsByClassName("sesslist")[0];
            sessList.innerHTML = "";
            if (resp.SessionItem && resp.SessionItem.length > 0) {//如果存在最近会话记录

                for (var i in resp.SessionItem) {
                    var item = resp.SessionItem[i];
                    var type = item.Type;//接口返回的会话类型
                    var sessType, typeZh, sessionId, sessionNick = '', sessionImage = '', senderId = '', senderNick = '';
                    if (type == webim.RECENT_CONTACT_TYPE.C2C) {//私聊
                        typeZh = '私聊';
                        sessType = webim.SESSION_TYPE.C2C;//设置会话类型
                        sessionId = item.To_Account;//会话id，私聊时为好友ID或者系统账号（值为@TIM#SYSTEM，业务可以自己决定是否需要展示），注意：从To_Account获取,

                        if (sessionId == '@TIM#SYSTEM') {//先过滤系统消息，，
                            webim.Log.warn('过滤好友系统消息,sessionId=' + sessionId);
                            continue;
                        }
                        var key = sessType + "_" + sessionId;
                        var c2cInfo = infoMap[key];
                        if (c2cInfo && c2cInfo.name) {//从infoMap获取c2c昵称
                            sessionNick = c2cInfo.name;//会话昵称，私聊时为好友昵称，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionNick = sessionId;//会话昵称，如果昵称为空，默认将其设成会话id
                        }
                        if (c2cInfo && c2cInfo.image) {//从infoMap获取c2c头像
                            sessionImage = c2cInfo.image;//会话头像，私聊时为好友头像，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionImage = friendHeadUrl;//会话头像，如果为空，默认将其设置demo自带的头像
                        }
                        senderId = senderNick = '';//私聊时，这些字段用不到，直接设置为空
                    } else if (type == webim.RECENT_CONTACT_TYPE.GROUP) {//群聊
                        typeZh = '群聊';
                        sessType = webim.SESSION_TYPE.GROUP;//设置会话类型
                        sessionId = item.ToAccount;//会话id，群聊时为群ID，注意：从ToAccount获取
                        sessionNick = item.GroupNick;//会话昵称，群聊时，为群名称，接口一定会返回

                        if (item.GroupImage) {//优先考虑接口返回的群头像
                            sessionImage = item.GroupImage;//会话头像，群聊时，群头像，如果业务设置过群头像（设置群头像请参考wiki文档-设置群资料接口），接口会返回
                        } else {//接口没有返回或者没有设置过群头像，再从infoMap获取群头像
                            var key = sessType + "_" + sessionId;
                            var groupInfo = infoMap[key];
                            if (groupInfo && groupInfo.image) {//
                                sessionImage = groupInfo.image
                            } else {//不存在或者没有设置过，则使用默认头像
                                sessionImage = groupHeadUrl;//会话头像，如果没有设置过群头像，默认将其设置demo自带的头像
                            }
                        }
                        senderId = item.MsgGroupFrom_Account;//群消息的发送者id

                        if (!senderId) {//发送者id为空
                            webim.Log.warn('群消息发送者id为空,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }
                        if (senderId == '@TIM#SYSTEM') {//先过滤群系统消息，因为接口暂时区分不了是进群还是退群等提示消息，
                            webim.Log.warn('过滤群系统消息,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }

                        senderNick = item.MsgGroupFromCardName;//优先考虑群成员名片
                        if (!senderNick) {//如果没有设置群成员名片
                            senderNick = item.MsgGroupFromNickName;//再考虑接口是否返回了群成员昵称
                            if (!senderNick && !sessionNick) {//如果接口没有返回昵称或者没有设置群昵称，从infoMap获取昵称
                                var key = webim.SESSION_TYPE.C2C + "_" + senderId;
                                var c2cInfo = infoMap[key];
                                if (c2cInfo && c2cInfo.name) {
                                    senderNick = c2cInfo.name;//发送者群昵称
                                } else {
                                    sessionNick = senderId;//如果昵称为空，默认将其设成发送者id
                                }
                            }
                        }

                    } else {
                        typeZh = '未知类型';
                        sessionId = item.ToAccount;//
                    }
                    if (!sessionId) {//会话id为空
                        webim.Log.warn('会话id为空,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionId == '@TLS#NOT_FOUND') {//会话id不存在，可能是已经被删除了
                        webim.Log.warn('会话id不存在,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionNick.length > maxNameLen) {//帐号或昵称过长，截取一部分，出于demo需要，业务可以自己决定
                        sessionNick = sessionNick.substr(0, maxNameLen) + "...";
                    }

                    tempSess = recentSessMap[sessType + "_" + sessionId];
                    if (!tempSess) {//先判断是否存在（用于去重），不存在增加一个

                        if (!firstSessId) {
                            firstSessType = sessType;//记录第一个会话类型
                            firstSessId = sessionId;//记录第一个会话id
                        }
                        recentSessMap[sessType + "_" + sessionId] = {
                            SessionType: sessType,//会话类型
                            SessionId: sessionId,//会话对象id，好友id或者群id
                            SessionNick: sessionNick,//会话昵称，好友昵称或群名称
                            SessionImage: sessionImage,//会话头像，好友头像或者群头像
                            C2cAccount: senderId,//发送者id，群聊时，才有用
                            C2cNick: senderNick,//发送者昵称，群聊时，才有用
                            UnreadMsgCount: item.UnreadMsgCount,//未读消息数,私聊时需要通过webim.syncMsgs(initUnreadMsgCount)获取,参考后面的demo，群聊时不需要。
                            MsgSeq: item.MsgSeq,//消息seq
                            MsgRandom: item.MsgRandom,//消息随机数
                            MsgTimeStamp: webim.Tool.formatTimeStamp(item.MsgTimeStamp),//消息时间戳
                            MsgGroupReadedSeq: item.MsgGroupReadedSeq || 0,
                            MsgShow: item.MsgShow//消息内容,文本消息为原内容，表情消息为[表情],其他类型消息以此类推
                        };

                        //在左侧最近会话列表框中增加一个会话div
                        addSess(sessType, webim.Tool.formatText2Html(sessionId), webim.Tool.formatText2Html(sessionNick), sessionImage, item.UnreadMsgCount, 'sesslist');
                    }

                }
                //清空聊天界面
                document.getElementsByClassName("msgflow")[0].innerHTML = "";

                tempSess = recentSessMap[firstSessType + "_" + firstSessId];//选中第一个会话
                selType = tempSess.SessionType;//初始化当前聊天类型

                selToID = tempSess.SessionId;//初始化当前聊天对象id

                selSess = webim.MsgStore.sessByTypeId(selType, selToID);//初始化当前会话对象

                setSelSessStyleOn(selToID);//设置当前聊天对象选中样式

                webim.syncMsgs(initUnreadMsgCount);//初始化最近会话的消息未读数


                if (cbOK)//回调
                    cbOK();

            }

        },
        cbErr
    );
};

//初始化最近会话的消息未读数
function initUnreadMsgCount() {
    var sess;
    var sessMap = webim.MsgStore.sessMap();
    for (var i in sessMap) {
        sess = sessMap[i];
        if (selToID && selToID != sess.id()) {//更新其他聊天对象的未读消息数
            updateSessDiv(sess.type(), sess.id(), sess.name(), sess.unread());
        }
    }
}

//初始化聊天界面最近会话列表
var initRecentContactListPage = function (cbOK, cbErr) {
    console.log('initRecentContactList')
    var options = {
        'Count': reqRecentSessCount//要拉取的最近会话条数
    };
    webim.getRecentContactList(
        options,
        function (resp) {

            console.log(resp)
            var tempSess;//临时会话变量
            var firstSessType;//保存第一个会话类型
            var firstSessId;//保存第一个会话id


            //清空聊天对象列表
            var sessList = document.getElementsByClassName("sesslist")[0];
            sessList.innerHTML = "";
            if (resp.SessionItem && resp.SessionItem.length > 0) {//如果存在最近会话记录

                for (var i in resp.SessionItem) {
                    var item = resp.SessionItem[i];
                    console.log(item)
                    var type = item.Type;//接口返回的会话类型
                    var sessType, typeZh, sessionId, sessionNick = '', sessionImage = '', senderId = '', senderNick = '';
                    if (type == webim.RECENT_CONTACT_TYPE.C2C) {//私聊
                        typeZh = '私聊';
                        sessType = webim.SESSION_TYPE.C2C;//设置会话类型
                        sessionId = item.To_Account;//会话id，私聊时为好友ID或者系统账号（值为@TIM#SYSTEM，业务可以自己决定是否需要展示），注意：从To_Account获取,

                        if (sessionId == '@TIM#SYSTEM') {//先过滤系统消息，，
                            webim.Log.warn('过滤好友系统消息,sessionId=' + sessionId);
                            continue;
                        }
                        var key = sessType + "_" + sessionId;
                        var c2cInfo = infoMap[key];
                        console.log(infoMap)
                        if (c2cInfo && c2cInfo.name) {//从infoMap获取c2c昵称
                            sessionNick = c2cInfo.name;//会话昵称，私聊时为好友昵称，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionNick = sessionId;//会话昵称，如果昵称为空，默认将其设成会话id
                        }
                        if (c2cInfo && c2cInfo.image) {//从infoMap获取c2c头像
                            sessionImage = c2cInfo.image;//会话头像，私聊时为好友头像，接口暂不支持返回，需要业务自己获取（前提是用户设置过自己的昵称，通过拉取好友资料接口（支持批量拉取）得到）
                        } else {//没有找到或者没有设置过
                            sessionImage = friendHeadUrl;//会话头像，如果为空，默认将其设置demo自带的头像
                        }
                        senderId = senderNick = '';//私聊时，这些字段用不到，直接设置为空
                    } else if (type == webim.RECENT_CONTACT_TYPE.GROUP) {//群聊
                        typeZh = '群聊';
                        sessType = webim.SESSION_TYPE.GROUP;//设置会话类型
                        sessionId = item.ToAccount;//会话id，群聊时为群ID，注意：从ToAccount获取
                        sessionNick = item.GroupNick;//会话昵称，群聊时，为群名称，接口一定会返回

                        if (item.GroupImage) {//优先考虑接口返回的群头像
                            sessionImage = item.GroupImage;//会话头像，群聊时，群头像，如果业务设置过群头像（设置群头像请参考wiki文档-设置群资料接口），接口会返回
                        } else {//接口没有返回或者没有设置过群头像，再从infoMap获取群头像
                            var key = sessType + "_" + sessionId;
                            var groupInfo = infoMap[key];
                            if (groupInfo && groupInfo.image) {//
                                sessionImage = groupInfo.image
                            } else {//不存在或者没有设置过，则使用默认头像
                                sessionImage = groupHeadUrl;//会话头像，如果没有设置过群头像，默认将其设置demo自带的头像
                            }
                        }
                        senderId = item.MsgGroupFrom_Account;//群消息的发送者id

                        if (!senderId) {//发送者id为空
                            webim.Log.warn('群消息发送者id为空,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }
                        if (senderId == '@TIM#SYSTEM') {//先过滤群系统消息，因为接口暂时区分不了是进群还是退群等提示消息，
                            webim.Log.warn('过滤群系统消息,senderId=' + senderId + ",groupid=" + sessionId);
                            continue;
                        }

                        senderNick = item.MsgGroupFromCardName;//优先考虑群成员名片
                        if (!senderNick) {//如果没有设置群成员名片
                            senderNick = item.MsgGroupFromNickName;//再考虑接口是否返回了群成员昵称
                            if (!senderNick && !sessionNick) {//如果接口没有返回昵称或者没有设置群昵称，从infoMap获取昵称
                                var key = webim.SESSION_TYPE.C2C + "_" + senderId;
                                var c2cInfo = infoMap[key];
                                if (c2cInfo && c2cInfo.name) {
                                    senderNick = c2cInfo.name;//发送者群昵称
                                } else {
                                    sessionNick = senderId;//如果昵称为空，默认将其设成发送者id
                                }
                            }
                        }

                    } else {
                        typeZh = '未知类型';
                        sessionId = item.ToAccount;//
                    }
                    if (!sessionId) {//会话id为空
                        webim.Log.warn('会话id为空,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionId == '@TLS#NOT_FOUND') {//会话id不存在，可能是已经被删除了
                        webim.Log.warn('会话id不存在,sessionId=' + sessionId);
                        continue;
                    }

                    if (sessionNick.length > maxNameLen) {//帐号或昵称过长，截取一部分，出于demo需要，业务可以自己决定
                        sessionNick = sessionNick.substr(0, maxNameLen) + "...";
                    }

                    tempSess = recentSessMap[sessType + "_" + sessionId];
                    if (!tempSess) {//先判断是否存在（用于去重），不存在增加一个

                        if (!firstSessId) {
                            firstSessType = sessType;//记录第一个会话类型
                            firstSessId = sessionId;//记录第一个会话id
                        }
                        recentSessMap[sessType + "_" + sessionId] = {
                            SessionType: sessType,//会话类型
                            SessionId: sessionId,//会话对象id，好友id或者群id
                            SessionNick: sessionNick,//会话昵称，好友昵称或群名称
                            SessionImage: sessionImage,//会话头像，好友头像或者群头像
                            C2cAccount: senderId,//发送者id，群聊时，才有用
                            C2cNick: senderNick,//发送者昵称，群聊时，才有用
                            UnreadMsgCount: item.UnreadMsgCount,//未读消息数,私聊时需要通过webim.syncMsgs(initUnreadMsgCount)获取,参考后面的demo，群聊时不需要。
                            MsgSeq: item.MsgSeq,//消息seq
                            MsgRandom: item.MsgRandom,//消息随机数
                            MsgTimeStamp: webim.Tool.formatTimeStamp(item.MsgTimeStamp),//消息时间戳
                            MsgGroupReadedSeq: item.MsgGroupReadedSeq || 0,
                            MsgShow: item.MsgShow//消息内容,文本消息为原内容，表情消息为[表情],其他类型消息以此类推
                        };

                        //在左侧最近会话列表框中增加一个会话div
                        addRecentContactSess(sessType, webim.Tool.formatText2Html(sessionId), webim.Tool.formatText2Html(sessionNick), sessionImage, item.UnreadMsgCount, 'sesslist');
                    }

                }

                //初始化最近会话的消息未读数
                webim.syncMsgs(() => {
                    var sess;
                    var sessMap = webim.MsgStore.sessMap();
                    for (var i in sessMap) {
                        sess = sessMap[i];

                        updateSessDiv(sess.type(), sess.id(), sess.name(), sess.unread());

                    }
                });


                if (cbOK)//回调
                    cbOK();

            }

        },
        cbErr
    );
};

